#include<iostream>
#include<sys/wait.h>
using namespace std;

void func(int sig)
{	
    int sts;
	pid_t pid = wait(&sts);  // 用以接收子进程的pid

	cout << "已终止的子进程编号：" << pid << endl;

	if(WIFEXITED(sts))
	{
		cout << "子进程是正常退出的，退出状态是：" << WEXITSTATUS(sts) << endl;
	}
	else
	{
		cout << "子进程是异常退出的，终止它的信号是：" << WTERMSIG(sts) << endl;
	}
}

// 如果父进程很忙，可以捕获SIGCHLD信号，在信号处理函数中调用wait()/waitpid()。
int main()
{
	signal(SIGCHLD, func);

    if(fork()>0)
	{
		// 父进程的流程
        while(true)
		{
			cout << "父进程忙着执行任务" << endl;
			sleep(1);
		}
	}else
	{
		// 子进程的流程
		sleep(6);
		int* p =0; *p=10;
		exit(0);
	}
}

